#include "tekstinmuokkaus.h"

tekstinmuokkaus::tekstinmuokkaus(QWidget *parent) : QWidget(parent)
{
    tiedosto = 0;

    leiska = new QVBoxLayout();
    nappileiska = new QHBoxLayout();

    tiedostonnimi = new QLabel(this);

    tekstialue = new QPlainTextEdit(this);

    uusinappi = new QPushButton("Uusi", this);
    uusinappi->setMaximumWidth(100);
    avaanappi = new QPushButton("Avaa", this);
    avaanappi->setMaximumWidth(100);
    tallennanappi = new QPushButton("Tallenna", this);
    tallennanappi->setMaximumWidth(100);

    nappileiska->setAlignment(Qt::AlignLeft|Qt::AlignTop);

    connect(uusinappi, SIGNAL(clicked()), this, SLOT(Uusi()));
    connect(tallennanappi, SIGNAL(clicked()), this, SLOT(Tallenna()));
    connect(avaanappi, SIGNAL(clicked()), this, SLOT(Avaa()));

    nappileiska->addWidget(uusinappi);
    nappileiska->addWidget(avaanappi);
    nappileiska->addWidget(tallennanappi);
    leiska->addLayout(nappileiska);
    leiska->addWidget(tiedostonnimi);
    leiska->addWidget(tekstialue);

    setLayout(leiska);
}

void tekstinmuokkaus::Tallenna()
{
    if(!tiedosto)
    {
        tiedosto = new QFile(QFileDialog::getSaveFileName(this, "Tallenna"));
    }

    QFileInfo info(*tiedosto);

    if(info.isWritable())
    {
        tiedosto->open(QIODevice::WriteOnly | QIODevice::Truncate);
        tiedosto->write(tekstialue->toPlainText().toUtf8());
    }

    if(!info.isWritable())
    {
        QMessageBox::critical(this, tr("Tekstinmuokkaus"), "Tiedostoa ei voitu tallentaa!");
    }

    tiedosto->close();
}

void tekstinmuokkaus::Uusi()
{
    if(tiedosto && tekstialue->toPlainText() != 0)
    {
        Tallenna();

        tekstialue->clear();

        delete tiedosto;
        tiedosto = 0;
    }

    tiedostonnimi->clear();
}

void tekstinmuokkaus::Avaa()
{
     tiedosto = new QFile(QFileDialog::getOpenFileName(this, "Avattava tiedosto"));

     if(tiedosto->open(QIODevice::ReadOnly))
     {
        tekstialue->setPlainText(QString::fromUtf8(tiedosto->readAll()));
        QFileInfo info(*tiedosto);
        tiedostonnimi->setText(QString(info.fileName()));
     }

     else
         QMessageBox::critical(this, tr("Tekstinmuokkaus"), "Tiedostoa ei voitu avata!");

     tiedosto->close();
}

tekstinmuokkaus::~tekstinmuokkaus()
{
    tiedosto->deleteLater();
}
